#include "LPC11xx.h"
#include "delay.h"

//从系统启动到当前的时间（毫秒）
uint32_t tick_count;

//系统定时器中断处理函数
void SysTick_Handler(void)
{
  tick_count++;
}

//延时（单位毫秒）
void delay_ms(uint32_t wait)
{
  uint32_t begin = tick_count;
  while (tick_count - begin < wait);
}

//延时（微秒）
void delay_us(uint16_t wait)
{
  //复位计数器
  LPC_TMR16B0->TC = 0;
  
  //计数器每微秒加1
  while (LPC_TMR16B0->TC < wait)
  {
  }
}

void delay_init(void)
{
  //配置系统定时器，1ms发送一次中断
  SysTick_Config(SystemCoreClock/1000);
    
  //1. 启用CT16B0定时器工作时钟
  LPC_SYSCON->SYSAHBCLKCTRL |= 1 << 7;
  
  //2. 配置预分频寄存器
  LPC_TMR16B0->PR = SystemCoreClock/1000000 - 1;
  
  //3. 启动定时器
  LPC_TMR16B0->TCR |= 1;
}
